-
Notifications
You must be signed in to change notification settings - Fork 745
/
ModuleDefinitionController.cs
203 lines (178 loc) · 10.4 KB
/
ModuleDefinitionController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information
namespace DotNetNuke.Entities.Modules.Definitions
{
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Data;
using DotNetNuke.Entities.Users;
using DotNetNuke.Security.Permissions;
using DotNetNuke.Services.Search.Entities;
/// <summary>ModuleDefinitionController provides the Business Layer for Module Definitions.</summary>
public class ModuleDefinitionController
{
private const string Key = "ModuleDefID";
private static readonly DataProvider DataProvider = DataProvider.Instance();
/// <summary>GetModuleDefinitionByID gets a Module Definition by its ID.</summary>
/// <param name="moduleDefID">The ID of the Module Definition.</param>
/// <returns>The <see cref="ModuleDefinitionInfo"/> or <see langword="null"/>.</returns>
public static ModuleDefinitionInfo GetModuleDefinitionByID(int moduleDefID)
{
return (from kvp in GetModuleDefinitions()
where kvp.Value.ModuleDefID == moduleDefID
select kvp.Value)
.FirstOrDefault();
}
/// <summary>GetModuleDefinitionByFriendlyName gets a Module Definition by its Friendly Name (and DesktopModuleID).</summary>
/// <param name="friendlyName">The friendly name.</param>
/// <returns>The <see cref="ModuleDefinitionInfo"/> or <see langword="null"/>.</returns>
public static ModuleDefinitionInfo GetModuleDefinitionByFriendlyName(string friendlyName)
{
Requires.NotNullOrEmpty("friendlyName", friendlyName);
return (from kvp in GetModuleDefinitions()
where kvp.Value.FriendlyName == friendlyName
select kvp.Value)
.FirstOrDefault();
}
/// <summary>GetModuleDefinitionByFriendlyName gets a Module Definition by its Friendly Name (and DesktopModuleID).</summary>
/// <param name="friendlyName">The friendly name.</param>
/// <param name="desktopModuleID">The ID of the Desktop Module.</param>
/// <returns>The <see cref="ModuleDefinitionInfo"/> or <see langword="null"/>.</returns>
public static ModuleDefinitionInfo GetModuleDefinitionByFriendlyName(string friendlyName, int desktopModuleID)
{
Requires.NotNullOrEmpty("friendlyName", friendlyName);
Requires.NotNegative("desktopModuleID", desktopModuleID);
return (from kvp in GetModuleDefinitions()
where kvp.Value.FriendlyName == friendlyName && kvp.Value.DesktopModuleID == desktopModuleID
select kvp.Value)
.FirstOrDefault();
}
/// <summary>GetModuleDefinitions gets a Dictionary of Module Definitions.</summary>
/// <returns>A <see cref="Dictionary{TKey,TValue}"/> mapping module definition ID to <see cref="ModuleDefinitionInfo"/>.</returns>
public static Dictionary<int, ModuleDefinitionInfo> GetModuleDefinitions()
{
return CBO.GetCachedObject<Dictionary<int, ModuleDefinitionInfo>>(
new CacheItemArgs(
DataCache.ModuleDefinitionCacheKey,
DataCache.ModuleDefinitionCachePriority),
GetModuleDefinitionsCallBack);
}
/// <summary>GetModuleDefinitionsByDesktopModuleID gets a Dictionary of Module Definitions with a particular DesktopModuleID, keyed by the FriendlyName.</summary>
/// <param name="desktopModuleID">The ID of the Desktop Module.</param>
/// <returns>A <see cref="Dictionary{TKey,TValue}"/> mapping module definition friendly name to <see cref="ModuleDefinitionInfo"/>.</returns>
public static Dictionary<string, ModuleDefinitionInfo> GetModuleDefinitionsByDesktopModuleID(int desktopModuleID)
{
// Iterate through cached Dictionary to get all Module Definitions with the correct DesktopModuleID
return GetModuleDefinitions().Where(kvp => kvp.Value.DesktopModuleID == desktopModuleID)
.ToDictionary(kvp => kvp.Value.FriendlyName, kvp => kvp.Value);
}
/// <summary>Get ModuleDefinition by DefinitionName.</summary>
/// <param name="definitionName">The definition name.</param>
/// <param name="desktopModuleID">The ID of the Desktop Module.</param>
/// <returns>A ModuleDefinition or null if not found.</returns>
public static ModuleDefinitionInfo GetModuleDefinitionByDefinitionName(string definitionName, int desktopModuleID)
{
Requires.NotNullOrEmpty("definitionName", definitionName);
Requires.NotNegative("desktopModuleID", desktopModuleID);
return (from kvp in GetModuleDefinitions()
where kvp.Value.DefinitionName == definitionName && kvp.Value.DesktopModuleID == desktopModuleID
select kvp.Value)
.FirstOrDefault();
}
/// <summary>SaveModuleDefinition saves the Module Definition to the database.</summary>
/// <param name="moduleDefinition">The Module Definition to save.</param>
/// <param name="saveChildren">A flag that determines whether the child objects are also saved.</param>
/// <param name="clearCache">A flag that determines whether to clear the host cache.</param>
/// <returns>The module definition ID.</returns>
public static int SaveModuleDefinition(ModuleDefinitionInfo moduleDefinition, bool saveChildren, bool clearCache)
{
int moduleDefinitionID = moduleDefinition.ModuleDefID;
if (moduleDefinitionID == Null.NullInteger)
{
// Add new Module Definition
moduleDefinitionID = DataProvider.AddModuleDefinition(
moduleDefinition.DesktopModuleID,
moduleDefinition.FriendlyName,
moduleDefinition.DefinitionName,
moduleDefinition.DefaultCacheTime,
UserController.Instance.GetCurrentUserInfo().UserID);
}
else
{
// Upgrade Module Definition
DataProvider.UpdateModuleDefinition(moduleDefinition.ModuleDefID, moduleDefinition.FriendlyName, moduleDefinition.DefinitionName, moduleDefinition.DefaultCacheTime, UserController.Instance.GetCurrentUserInfo().UserID);
}
if (saveChildren)
{
foreach (KeyValuePair<string, PermissionInfo> kvp in moduleDefinition.Permissions)
{
kvp.Value.ModuleDefID = moduleDefinitionID;
// check if permission exists
var permissionController = new PermissionController();
ArrayList permissions = permissionController.GetPermissionByCodeAndKey(kvp.Value.PermissionCode, kvp.Value.PermissionKey);
if (permissions != null && permissions.Count == 1)
{
var permission = (PermissionInfo)permissions[0];
kvp.Value.PermissionID = permission.PermissionID;
permissionController.UpdatePermission(kvp.Value);
}
else
{
permissionController.AddPermission(kvp.Value);
}
}
foreach (KeyValuePair<string, ModuleControlInfo> kvp in moduleDefinition.ModuleControls)
{
kvp.Value.ModuleDefID = moduleDefinitionID;
// check if definition exists
ModuleControlInfo moduleControl = ModuleControlController.GetModuleControlByControlKey(kvp.Value.ControlKey, kvp.Value.ModuleDefID);
if (moduleControl != null)
{
kvp.Value.ModuleControlID = moduleControl.ModuleControlID;
}
ModuleControlController.SaveModuleControl(kvp.Value, clearCache);
}
}
if (clearCache)
{
DataCache.ClearHostCache(true);
}
return moduleDefinitionID;
}
/// <summary>GetModuleDefinitionByID gets a Module Definition by its ID.</summary>
/// <param name="objModuleDefinition">The object of the Module Definition.</param>
public void DeleteModuleDefinition(ModuleDefinitionInfo objModuleDefinition)
{
this.DeleteModuleDefinition(objModuleDefinition.ModuleDefID);
}
/// <summary>DeleteModuleDefinition deletes a Module Definition By ID.</summary>
/// <param name="moduleDefinitionId">The ID of the Module Definition to delete.</param>
public void DeleteModuleDefinition(int moduleDefinitionId)
{
// Delete associated permissions
var permissionController = new PermissionController();
foreach (PermissionInfo permission in permissionController.GetPermissionsByModuleDefID(moduleDefinitionId))
{
permissionController.DeletePermission(permission.PermissionID);
}
DataProvider.DeleteModuleDefinition(moduleDefinitionId);
DataCache.ClearHostCache(true);
// queue remove module definition from search index
var document = new SearchDocumentToDelete
{
ModuleDefId = moduleDefinitionId,
};
DataProvider.Instance().AddSearchDeletedItems(document);
}
/// <summary>GetModuleDefinitionsCallBack gets a Dictionary of Module Definitions from the Database.</summary>
/// <param name="cacheItemArgs">The CacheItemArgs object that contains the parameters needed for the database call.</param>
private static object GetModuleDefinitionsCallBack(CacheItemArgs cacheItemArgs)
{
return CBO.FillDictionary(Key, DataProvider.GetModuleDefinitions(), new Dictionary<int, ModuleDefinitionInfo>());
}
}
}